package org.ehe.erp.service.quality;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.erp.domain.quality.ErpBomQualityItem;
import org.ehe.erp.domain.quality.bo.ErpBomQualityItemBo;
import org.ehe.erp.domain.quality.vo.ErpBomQualityItemVo;

import java.util.Collection;
import java.util.List;

/**
 * BOM质检项目关联视图Service
 * @author :zhangnn
 * @className :ErpBomQualityItemService
 * @description: TODO
 * @date 2025-09-10 16:25:38
 */
public interface ErpBomQualityItemService extends IService<ErpBomQualityItem> {
    /**
     * 查询BOM质检项目关联分页列表
     *
     * @param bo 查询条件
     * @param pageQuery 分页参数
     * @return 分页结果
     */
    TableDataInfo<ErpBomQualityItemVo> queryPageList(ErpBomQualityItemBo bo, PageQuery pageQuery);

    /**
     * 查询BOM质检项目关联列表
     *
     * @param bo 查询条件
     * @return BOM质检项目关联列表
     */
    List<ErpBomQualityItemVo> queryList(ErpBomQualityItemBo bo);

    /**
     * 根据ID查询BOM质检项目关联详情
     *
     * @param id BOM质检项目关联ID
     * @return BOM质检项目关联详情
     */
    ErpBomQualityItemVo queryById(Long id);

    /**
     * 新增BOM质检项目关联
     *
     * @param bo BOM质检项目关联信息
     * @return 是否成功
     */
    Boolean insertByBo(List<ErpBomQualityItemBo> bo);

    /**
     * 修改BOM质检项目关联
     *
     * @param bo BOM质检项目关联信息
     * @return 是否成功
     */
    Boolean updateByBo(ErpBomQualityItemBo bo);

    /**
     * 校验并批量删除BOM质检项目关联
     *
     * @param ids 主键集合
     * @param isValid 是否校验
     * @return 是否成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 根据BOM ID查询关联的质检项目列表
     *
     * @param bomId BOM ID
     * @return 质检项目关联列表
     */
    List<ErpBomQualityItemVo> getQualityItemsByBomId(Long bomId);

    /**
     * 根据质检项目ID查询关联的BOM列表
     *
     * @param qualityItemId 质检项目ID
     * @return BOM关联列表
     */
    List<ErpBomQualityItemVo> getBomsByQualityItemId(Long qualityItemId);

    /**
     * 为BOM批量设置质检项目
     *
     * @param bomId BOM ID
     * @param qualityItemIds 质检项目ID列表
     * @return 是否成功
     */
    Boolean setBomQualityItems(Long bomId, List<Long> qualityItemIds);

    /**
     * 为BOM批量设置质检项目（带必检标识）
     *
     * @param bomId BOM ID
     * @param qualityItems 质检项目配置列表
     * @return 是否成功
     */
    Boolean setBomQualityItemsWithConfig(Long bomId, List<ErpBomQualityItemBo> qualityItems);

    /**
     * 根据BOM ID删除关联关系
     *
     * @param bomId BOM ID
     * @return 是否成功
     */
    Boolean deleteByBomId(Long bomId);

    /**
     * 根据质检项目ID删除关联关系
     *
     * @param qualityItemId 质检项目ID
     * @return 是否成功
     */
    Boolean deleteByQualityItemId(Long qualityItemId);

    /**
     * 校验BOM和质检项目关联是否存在
     *
     * @param bomId BOM ID
     * @param qualityItemId 质检项目ID
     * @return 是否存在
     */
    Boolean checkRelationExists(Long bomId, Long qualityItemId);

    /**
     * 复制BOM的质检项目关联到另一个BOM
     *
     * @param sourceBomId 源BOM ID
     * @param targetBomId 目标BOM ID
     * @return 是否成功
     */
    Boolean copyBomQualityItems(Long sourceBomId, Long targetBomId);
}
